#include <bits/stdc++.h>
using namespace std;
using ll =long long;
#define all(v) v.begin(),v.end()
#define rep(i,a,b) for(int i=a;i<b;i++)
#define rrep(i,a,b) for(int i=a;i>=b;i--)
ll INF=2e15;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
ll n;cin>>n;
vector<ll> a(n-1);
for(ll i=0;i<n-1;i++) cin>>a[i];
ll root=a[0];
ll now=root;
vector<bool> note(n+10);
note[root]=true;
vector<pair<ll,ll>> ans;
ll ind=1;
for(ll i=n;i>=1;i--) {
if(note[i]) continue;
while(ind<n-1&&!note[i]) {
if(!note[a[ind]]) {
ans.push_back(make_pair(now,a[ind]));
note[a[ind]]=true;
now=a[ind];
}
else {
ans.push_back(make_pair(now,i));
note[i]=true;
now=a[ind];
}
ind++;
}
if(ind==n-1&&!note[i]) {
ans.push_back(make_pair(now,i));
note[i]=true;
}
if(!note[i]) {
cout<<-1<<endl;
return 0;
}
}
cout<<root<<endl;
for(auto x:ans) cout<<x.first<<" "<<x.second<<endl;
}
112. Path Sum | 1556A - A Variety of Operations |
136. Single Number | 169. Majority Element |
119. Pascal's Triangle II | 409. Longest Palindrome |
1574A - Regular Bracket Sequences | 1574B - Combinatorics Homework |
1567A - Domino Disaster | 1593A - Elections |
1607A - Linear Keyboard | EQUALCOIN Equal Coins |
XOREQN Xor Equation | MAKEPAL Weird Palindrome Making |
HILLSEQ Hill Sequence | MAXBRIDGE Maximise the bridges |
WLDRPL Wildcard Replacement | 1221. Split a String in Balanced Strings |
1002. Find Common Characters | 1602A - Two Subsequences |
1555A - PizzaForces | 1607B - Odd Grasshopper |
1084A - The Fair Nut and Elevator | 1440B - Sum of Medians |
1032A - Kitchen Utensils | 1501B - Napoleon Cake |
1584B - Coloring Rectangles | 1562B - Scenes From a Memory |
1521A - Nastia and Nearly Good Numbers | 208. Implement Trie |